package com.example.denglu.util;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/**
 * @Author jiahuajiang
 * @Date 2021/6/30 9:38
 * @Description 登录用户属性设置
 */
public class UserUtils {
    private UserUtils() {
    }

    private static final UserUtils _this = new UserUtils();
    private static final String TENANT_ID = "tenantId";
    private static final String USER_ID = "userId";
    private static final String ORG_ID = "orgId";

    /**
     * 租户设置
     *
     * @param setFunc
     */
    public UserUtils setTenantId(Func.SetFunc<String> setFunc) {
        UserUtils.setString(setFunc, TENANT_ID);
        return _this;
    }

    /**
     * 获取租户ID
     *
     * @return
     */
    public static String getTenantId() {
        return getString(TENANT_ID);
    }

    /**
     * 用户设置
     *
     * @param setFunc
     */
    public UserUtils setUserId(Func.SetFunc<String> setFunc) {
        UserUtils.setString(setFunc, USER_ID);
        return _this;
    }

    /**
     * 获取用户ID
     *
     * @return
     */
    public static String getUserId() {
        return getString(USER_ID);
    }

    /**
     * 部门设置
     *
     * @param setFunc
     */
    public UserUtils setOrgId(Func.SetFunc<String> setFunc) {
        UserUtils.setString(setFunc, ORG_ID);
        return _this;
    }

    /**
     * 获取部门信息
     *
     * @return
     */
    public static String getOrgId() {
        return getString(ORG_ID);
    }

    /**
     * 当前时间设置
     *
     * @param setFunc
     */
    public UserUtils setCurrentDate(Func.SetFunc<Date> setFunc) {
        setFunc.set(new Date());
        return _this;
    }

    /**
     * 属性设置
     *
     * @param setFunc
     */
    private static void setString(Func.SetFunc<String> setFunc, String id) {
        setFunc.set(getString(id));
    }

    public static UserUtils instance() {
        return _this;
    }

    /**
     * 属性获取
     *
     * @param id
     * @return
     */
    private static String getString(String id) {
        HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
        String str = request.getHeader(id);
        Assert.isTrue(StringUtils.isNotBlank(str), "{}不能为空".replace("{}", id));
        return str;
    }
}
